Error coalescing

ABSTRACT

A programmable crossbar matrix or an array of steering multiplexors (MUXs) coalesces (i.e., routes) the data values from multiple known “bad” bit positions within multiple symbols of a codeword, to bit positions within a single codeword symbol. The single codeword symbol receiving the known “bad” bit positions may correspond to a check symbol (vs. a data symbol). Configuration of the routing logic may occur at boot or initialization time. The configuration of the routing logic may be based upon error mapping information retrieved from system non-volatile memory (e.g., memory module serial presence detect information), or from memory tests performed during initialization. The configuration of the routing logic may be changed on a per-rank basis.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram illustrating a memory system.

FIGS. 2A-2E are diagrams illustrating error coalescing.

FIG. 3 is a flowchart illustrating a method operating a memorycontroller.

FIG. 4 is a flowchart illustrating a method of storing error coalescingcodewords on a per rank basis.

FIG. 5 is a flowchart illustrating a method of retrieving errorcoalescing codewords on a per rank basis.

FIG. 6 is a block diagram illustrating example error coalescing logic.

FIG. 7 is a flowchart illustrating a method of configuring errorcoalescing logic.

FIG. 8 is a block diagram of a processing system.

DETAILED DESCRIPTION OF THE EMBODIMENTS

The presence and prevalence of random bit errors in memories negativelyimpacts the robustness and availability of computer systems. In anembodiment, a programmable crossbar matrix or an array of steeringmultiplexors (MUXs) coalesces (i.e., routes) the data from multipleknown “bad” bit positions within multiple symbols of a codeword to bitpositions within a single codeword symbol. In an embodiment, the singlecodeword symbol receiving the values of the known “bad” bit positionscorresponds to a check symbol (vs. a data symbol).

Configuration of the routing logic may occur at boot or initializationtime. The configuration of the routing logic may be based upon errormapping information retrieved from system non-volatile memory (e.g.,memory module serial presence detect information), or from memory testsperformed during initialization. The configuration of the routing logicmay be changed on a per-rank basis. In an embodiment, a full N-to-Ncrossbar matrix or steering MUXs are disposed entirely in the memorycontroller. In another embodiment, the steering logic/function may bedistributed between the memory controller, data buffers (if any), and/ormemory devices.

FIG. 1 is a block diagram illustrating a memory system. In FIG. 1,memory system 100 comprises a memory controller 110, memory 120, and ahost 150. Memory controller 110 includes error detect and correct (EDC)circuitry 122, coalescing/steering logic 125, configuration circuitry126, and interface 128. Host 150 may store configuration information 111and/or memory test result information 112. Host 150 is operativelycoupled to memory controller 110. Memory controller 110 is operativelycoupled to memory 120.

Controller 110 and memory component 120 may be integrated circuit typedevices, such as are commonly referred to as a “chips”. A memorycontroller, such as controller 120, manages the flow of data going toand from memory devices and/or memory modules. Memory component 120(also referred to as memory 120) may be a standalone device, may be acomponent of a memory module, or may be a memory module. A memorycontroller can be a separate, standalone chip, or integrated intoanother chip. For example, a memory controller may be included on asingle die with a microprocessor (e.g., host 150), or included as partof a more complex integrated circuit system such as a block of a systemon a chip (SOC).

Memory 120 can include a dynamic random access memory (DRAM) core orother type of memory cores, for example, static random access memory(SRAM) cores, or non-volatile memory cores such as flash. Controller 110and memory 120 may be interconnected with each other in a variety ofsystem topologies including on a PC board (e.g., where the memory is ona module and the controller is socketed to the PC board, or in“die-down” arrangement where one or both of the chips are soldered tothe PC board), stacked one on top of another and encapsulated in asingle package or each having separate package (package-on-package),both disposed on a shared substrate, on an interposer, or even in adirect-attach arrangement.

As used herein, the terms related to error correction (e.g., EDC, EDCcode, ECC, ECC code, check bits, check symbols, etc.) refer broadly tothe generation and/or addition of redundancy (i.e., some extra data) todata, which can be used (e.g., by EDC circuitry 122) to check theconsistency of retrieved data, and/or to recover data that has beendetermined to be corrupted. Thus, at least the terms EDC information andEDC code should be understood to include redundant information thatmerely checks for corruption (e.g., parity so that retrieval may beretried) as well as more complex error detection/correction schemes suchas checksums, cyclic redundancy checks (CRC—e.g., CRC-8), and forwarderror correction schemes (e.g., BCH codes, Reed-Solomon codes, GaloisField parity (e.g., Chipkill), etc.)

In an embodiment, host 150 provides controller 110 with a data block(e.g., 256 bits) to be stored in memory 120. EDC circuitry 122 generatesone or more check symbols (e.g., four 8-bit check symbols) based on thedata in the data block. The data block and the check symbols form acodeword having data symbols and check symbols. The data symbolscorrespond to selected bits in the codewords using a mapping of bitlocations to data symbol fields. The check symbols correspond to otherselected bits in the codewords using a mapping of bit locations to checksymbol fields.

For example, a codeword may be arranged such that bits numbered 0through 7 correspond to a first data symbol, bits numbered 8 through 15a second data symbol, and so on with bits 247 to 255 corresponding to a32^(nd) data symbol. The arrangement may then continue with bitsnumbered 256 to 263 corresponding to a first check symbol, bits numbered264 through 271 a second check symbol, and so on with bits 279 to 287corresponding to a fourth check symbol.

The codeword is passed to coalescing logic 125. Configuration circuitry126 controls coalescing logic 125 to swap one or more bits of thecodeword. In particular, coalescing logic 125 swaps one or more bitsthat meet at least one unreliability criteria with other bits (e.g.,bits that meet a reliability criteria.) Examples of unreliabilitycriteria that may be met include: a memory location in memory 120 thatis read/written using the bit location is ‘stuck at’ a zero or one, amemory location that is read/written using the bit location exhibits abit error rate that exceeds a threshold, etc. Configuration information111 and/or memory test result information 112 may be used to determinewhich bit positions will be selected to be swapped. In an embodiment,bit positions that are in a single check symbol are swapped with bitpositions corresponding that are in multiple data symbols. This swappingforms a second ‘coalesced’ codeword that is written to memory 120 byinterface 128.

It should be understood that, in an embodiment, there may be twocoalescing logic blocks—one for read operations and one for writeoperations. However, for the sake of brevity, the Figures illustrate asingle coalescing logic block that both rearranges and restores the bitpositions (e.g., by swapping one or more bits with each other.)

The configuration of coalescing logic 125 may occur at boot orinitialization time. In an embodiment, the configuration of coalescinglogic 125 may be based upon error mapping information retrieved fromsystem non-volatile memory (e.g., memory module serial presence detectinformation), or from memory tests performed during initialization. Theconfiguration of coalescing logic 125 may be changed on a per-rankbasis. In an embodiment, coalescing logic 125 may comprise a full N-to-Ncrossbar matrix. In an embodiment, coalescing logic 125 may comprisesteering MUXs.

When the coalesced codeword is retrieved from memory 120, interface 128provides the retrieved codeword to coalescing logic 125 to ‘undo’ theswapping. By undoing the swapping, each of the swapped bits in thecodeword are restored to their original location in the data symbolsfields and check symbol fields of the original codeword. This restoredcodeword may then be checked and/or corrected by EDC logic 122. Afterbeing checked and/or corrected, the retrieved data block may be passedto host 150 by controller 110.

FIGS. 2A-2E are diagrams illustrating error coalescing. In FIG. 2A errorcoalescing system 200 includes codeword 201, coalescing circuitry 225,codeword 202, and memory 220. In FIG. 2A, codeword 201 is composed of288 bits labeled b₀ to b₂₈₇. These bits are grouped into 32 8-bit datasymbol fields and four 8-bit check symbol fields—labeled DS₀ to DS₃₁ andCS₀ to CS₃, respectively. In FIGS. 2A-2E, DS₀ is composed of bits b₀-b₇;DS₁ is composed of bits b₈-b₁₅, and so on. CS₀ is composed of bitsb₂₅₆-b₂₆₃; CS1 is composed of bits b₂₆₄-b₂₇₁, and so on. Other numbersof bits per codeword, and other arrangements of bit positions to symbolsmay be used. Coalescing circuitry 225 produces codeword 202 fromcodeword 201 by swapping (or otherwise re-arranging) one or more bits ofcodeword 201.

In FIG. 2A, coalescing system 200, and coalescing circuitry 225 inparticular, are illustrated as configured to swap bit b₇ in DS₀ with bitb₂₈₀ in CS₃ in codeword 201 to produce codeword 202. Thus, for example,if bit b₇ has been determined to meet an unreliability threshold whenstored and retrieved from memory 220, coalescing circuitry 225 swaps(exchanges) the bit value of b₇ in codeword 201 with the bit value ofb₂₈₀ in codeword 201 before coalescing system 200 stores codeword 202 tomemory 220. This places the bit value (i.e., bit₂₈₀) from a check symbol(i.e., CS₃) into the unreliable bit position (b₇), when stored to memory220, rather than a bit value from a data symbol (i.e., the ‘old’ b₇).Although only two bits are being swapped in FIG. 2A, multiple unreliablebits may be swapped into CS₃. In this manner, the unreliabilityassociated with multiple bits (and/or symbols) may be concentrated(coalesced) into a single symbol (when retrieved).

In FIG. 2B, coalescing system 200, and coalescing circuitry 225 inparticular, are illustrated as configured to swap the relocated bit b₇in codeword 203 (which was retrieved from memory 220 and therefore mayhave errors) with the relocated bit b₂₈₀. This produces codeword 204with bits b₇ and b₂₈₀ located in their correct symbols and bit locationsof DS₀ and CS₃, respectively.

FIG. 2C further illustrates how the unreliability of a bit is relocatedto a check symbol. Before storing coalescing system 200 swaps(exchanges) the bit value of b₇ in codeword 201 with the bit value ofb₂₈₀ in codeword 201 before coalescing system 200 stores codeword 202 tomemory 220 at all addresses A[ ]. Thus, in FIG. 2C, the values of bitb₂₈₀ in memory 220 are illustrated adjacent to the values for bit b₈.Likewise, the values of bit b₇ in memory 220 are illustrated adjacent tothe values for bit b₂₇₉.

In FIG. 2C, bit position b₇ has been determined to meet an unreliabilitythreshold. The example unreliability depicted in FIG. 2C is a bad bit atlocation b₇ of address A[N]. Thus, in FIG. 2C, the value at address A[N]in memory 220 for bit b₂₈₀ (which is now in position b₇) has an “X” overit. When address A[N] is read, codeword 205 is produced and input tocoalescing circuitry 225. Coalescing circuitry 225 swaps the relocatedbit b₇ in codeword 205 with the (now unreliable) relocated bit valueb₂₈₀. This produces codeword 206 with bits b₇ and b₂₈₀ located in theircorrect symbols of DS₀ and CS₃, respectively—where the unreliability ofthe restored bit value b₂₈₀ is illustrated by the “X” over bit b₂₈₀ andthe “X” in CS₃.

FIG. 2D illustrates how the unreliability of multiple bits at the samememory address are relocated to a check symbol. Before storing,coalescing system 200 swaps (at all addresses A[ ]) the bit values of b₇with the bit value of b₂₈₀ and the bit values of b₂₇₉ with the bitvalues of b₂₇₃ before coalescing system 200 stores codewords to memory220. Bit position b₇ has been determined to meet an unreliabilitythreshold. The example unreliability depicted in FIG. 2D is a bad bit atlocation b₇ of address A[N]. Thus, in FIG. 2D, the value at address A[N]in memory 220 for bit b₂₈₀ (which is now in position b₇) has an “X” overit. Likewise, Bit position b₂₇₉ has been determined to meet anunreliability threshold. Thus, in FIG. 2D, the value at address A[N+1]in memory 220 for bit b₂₈₀ (which is now in position b₇) has an “X” overit.

When address A[N+1] is read, codeword 207 is produced and input tocoalescing circuitry 225. Coalescing circuitry 225 swaps the relocatedbits b₇, b₂₆₃, b₂₇₉, and b₂₈₀ in codeword 207 with their respectivecounterparts. This produces codeword 208 with bits b₇, b₂₆₃, b₂₇₉, andb₂₈₀ located in their correct symbols. The unreliability of the restoredbit value b₂₇₉ is illustrated by the “X” over bit b₂₇₉ and the “X” inCS₃. Note that because of the nature of the unreliability of bit b₇(i.e., only occurs at address A[N]), the “X” over bit b₂₈₀ does nottranslate to codeword 208 (because address A[N+1] was being retrieved.)However, check symbol CS₃ is still unreliable due to the unreliabilityof bit b₂₇₉. In this example, the second unreliable bit, b₂₇₉, is incheck symbol CS0. However, this is to briefly illustrate that unreliablebits can come from both data symbols and check symbols. The secondunreliable bit can come from a data symbol.

FIG. 2E illustrates how the unreliability of multiple bits are relocatedto a check symbol. Before storing coalescing system 200 swaps (at alladdresses A[ ]) the bit values of b₇ with the bit value of b₂₈₀ and thebit values of b₂₇₉ with the bit values of b₂₇₃ before coalescing system200 stores codewords to memory 220. Bit positions b₇ and b₂₇₉ have beendetermined to meet an unreliability threshold. The example unreliabilitydepicted in FIG. 2D are bad bits at location b₇ and b₂₇₉ of addressA[N]. Thus, in FIG. 2E, the values at address A[N] in memory 220 for bitb₂₈₀ (which is now in position b₇) and for bit b₂₇₉ (which is now inposition b₂₆₃) have an “X'”s over them.

When address A[N] is read, codeword 209 is produced and input tocoalescing circuitry 225. Coalescing circuitry 225 swaps the relocatedbits b₇, b₂₆₃, b₂₇₉, and b₂₈₀ in codeword 209 with their respectivecounterparts. This produces codeword 219 with bits b₇, b₂₆₃, b₂₇₉, andb₂₈₀ located in their correct symbols. The unreliability of the restoredbit values b₂₇₉ and b₂₈₀ are illustrated by the “X” over bits b₂₇₉ andb₂₈₀. The unreliability of these two bits is also illustrated by the “X”in CS3. In this example, the second unreliable bit, b₂₇₉, is in checksymbol CS0. However, this is to briefly illustrate that unreliable bitscan come from both data symbols and check symbols. The second unreliablebit can come from a data symbol.

For certain EDC coding schemes (e.g., RS codes), multiple single-biterrors in the same symbol are not harder to detect and correct than asingle bit error in that symbol (a.k.a., symbol based EDC codes). Inother words, it does not matter to the code how many bits in a symbolare in error—if multiple bits in a symbol are corrupted, it only countsas a single error. Thus, placing as many unreliable bit positions intothe same symbol improves the ability to detect and correct errors whencompared to leaving unreliable bits in their original bit positions.

In an embodiment, since the unreliable (or ‘bad’) bits are all placed inthe same symbol, that symbol may be, for the purposes of error detectionand or correction, always considered an ‘erasure.’ In these codes, thenumber of correctable errors may be governed by the following equation:2E+S≤n−k, where E is the number of symbols with errors (error symbols),S is the number of erased symbols, n is the total number of symbols, andk is the number of data symbols (this may also be expressed as t=n−k,where t is the number of check symbols.) Thus, for the example codewordillustrated in FIGS. 2A-2E: n=36, k=32 and S=1 (for the know‘unreliable’ symbol), then 1 symbol (with any number of bit errors) inaddition to the erasure or ‘known bad’ symbol can be detected andcorrected because 2*1+1≤36−32=4. In another example, (not shown in theFigures) a codeword may have n=39, k=32, and S=1. For this example, upto three additional symbols with errors can be detected and correctedbecause: 2*3+1≤39−32=7.

FIG. 3 is a flowchart illustrating a method operating a memorycontroller. The steps illustrated in FIG. 3 may be performed by, forexample, one or more elements of system 100, and/or system 200.Information is received that at least one bit position in a memory rankmeets an unreliability criteria (302). For example, host 150 and/orcontroller 110 may test memory 120 during initialization and determinethat storage cells corresponding to one or more bit positions areunreliable and/or otherwise may fail to properly store data underexpected operating conditions. In another example, host 150 may querymemory 120 (e.g., using mode register set commands and/or using a serialpresence detect channel) and receive information that indicates storagecells corresponding to one or more bit positions are unreliable and/orotherwise may fail to properly store data under expected operatingconditions. In another example, the information may be in the form ofhost 150 and/or controller 110's control of configuration circuitry 126to swap certain bits when reading and writing to memory 120 and/or agiven rank of memory 120.

A first block of data comprising data fields and check fields isreceived (304). For example, EDC circuitry 122 may provide to coalescinglogic 125 a codeword (e.g., codeword 201) that includes fields for datasymbols (e.g., DS0-DS31) and fields for check symbols (e.g., CS0-CS3.)Before the first block of data is stored to the memory rank, the valuesat the at least one bit position(s) are swapped with respective selectedbit positions in a single check field (306). For example, coalescinglogic 125 may, before the codeword is stored, swap the values at one ormore bit position(s) in the data symbol fields with the values atselected bit positions in a single check symbol field, where the bitspositions in the data symbol fields correspond to one or more bitpositions that have been determined (or have been deemed) to beunreliable. This swapping places the values of unreliable bit positionsinto the same symbol thereby improving the ability to detect and correcterrors when compared to leaving unreliable bits in their original bitpositions. In an embodiment, since the unreliable (or ‘bad’) bits areall placed in the same symbol, that symbol may be, for the purposes oferror detection and or correction, always considered an ‘erasure.’

The first block of data is stored to the memory rank (308). For example,coalescing logic 125 may provide interface 128 with the re-arranged (butstill containing the same information) codeword for storage to memory120. From the memory rank and from the address, a second block of datacorresponding to a retrieved version of the first block of data isreceived (310). For example, controller 110, using interface 128, mayretrieve, from a given address the codeword it had previously stored tothat given address. This retrieved version may have errors and thereforemay not be the same as the originally stored codeword.

The values at the respective selected bit positions in the single checkfield of the second block of data are swapped with the values at the atleast one bit position(s) to form a third block of data that has datafields and check fields that correspond to the data fields and checkfields of the first block of data (312). For example, coalescing logic125 may, swap the values at the values at the selected bit positions inthe single check symbol field with the one or more bit position(s) inthe data symbol fields that were previously swapped before being stored.The bit positions in the data symbol fields correspond to the one ormore bit positions that have been determined (or have been deemed) to beunreliable. This restores the swapped bits to their original positionsin the data symbol fields and check symbol fields so that EDC circuitry122 may check and/or correct errors in the retrieved codeword.

FIG. 4 is a flowchart illustrating a method of storing error coalescingcodewords on a per rank basis. The steps illustrated in FIG. 4 may beperformed by, for example, one or more elements of system 100, and/orsystem 200. Information that at least a first bit position in a firstmemory rank meets an unreliability criteria is received (402). Forexample, host 150 and/or controller 110 may test a first rank of memoryduring initialization and determine that storage cells corresponding toa first set of bit position(s) are unreliable and/or otherwise may failto properly store data under expected operating conditions. In anotherexample, host 150 may query a first rank of memory (e.g., using moderegister set commands and/or using a serial presence detect channel) andreceive information that indicates storage cells corresponding to thefirst set of bit position(s) are unreliable and/or otherwise may fail toproperly store data under expected operating conditions. In anotherexample, the information may be in the form of host 150 and/orcontroller 110's control of configuration circuitry 126 to swap certainbits when reading and writing to memory 120 and/or a given rank ofmemory 120.

Information that at least a second bit position in a second memory rankmeets the unreliability criteria is received (404). For example, host150 and/or controller 110 may test a second rank of memory duringinitialization and determine that storage cells corresponding to asecond set of bit position(s) are unreliable and/or otherwise may failto properly store data under expected operating conditions. In anotherexample, host 150 may query a second rank of memory (e.g., using moderegister set commands and/or using a serial presence detect channel) andreceive information that indicates storage cells corresponding to thesecond set of bit position(s) are unreliable and/or otherwise may failto properly store data under expected operating conditions. In anotherexample, host 150 and/or controller 110 may control configurationcircuitry 126 to swap the second set of bit position(s) with other bitpositions when reading and writing to a first rank of memory.

A switching network is configured to swap the value at the first bitposition with the value at a third bit position (406). For example, whenwriting to a first rank of memory, coalescing logic 125 may beconfigured to swap the values at a first set of bit position(s) in thedata symbol fields with the values at selected bit positions in a singlecheck symbol field. The first set of bit position(s) in the data symbolfields may correspond to bit positions in the first rank that have beendetermined (or have been deemed) to be unreliable. This swapping of thevalues at the first set of bit position(s) places the values that aregoing to be stored in unreliable bit positions of the first rank intothe same (e.g., check) symbol. This can improve the ability to detectand correct errors when compared to leaving values that otherwise wouldbe stored in unreliable bit position(s) in their original (e.g.,multiple data symbol) bit positions.

A first block of data is received (408). For example, coalescing logic125 may receive, from EDC circuitry 122, a first codeword (e.g.,codeword 201). The first block of data is passed through the switchingnetwork thereby swapping the values at the first and third bit positions(410). For example, the first codeword (e.g., codeword 201) may bepassed through coalescing logic 125 to produce a first rearrangedcodeword (e.g., codeword 202) with the values at a first set of bitposition(s) in the data symbol fields swapped with the values atselected bit positions in a single check symbol field.

At a first address, the first block of data is stored to the firstmemory rank (412). For example, the first rearranged codeword (e.g.,codeword 202) may be stored to a first memory rank that has storagecells corresponding to the first set of bit position(s) that areunreliable and/or otherwise may fail to properly store data underexpected operating conditions.

The switching network is configured to swap the value at the second bitposition with the value at a fourth bit position (414). For example,when writing to a second rank of memory, coalescing logic 125 may beconfigured to swap the values at a second set of bit position(s) (whichmay be different, or the same as, the first set of bit positions) in thedata symbol fields with the values at selected bit positions in thesingle check symbol field. The second set of bit position(s) in the datasymbol fields may correspond to bit position(s) in the second rank thathave been determined (or have been deemed) to be unreliable. Thisswapping of the values at the second set of bit positions places thevalues that are going to be stored in unreliable bit positions of thesecond rank into the same (e.g., check) symbol. This can improve theability to detect and correct errors when compared to leaving valuesthat otherwise would be stored in unreliable bit position in theiroriginal (e.g., multiple data symbol) bit positions.

A second block of data is received (416). For example, coalescing logic125 may receive, from EDC circuitry 122, a second codeword. The secondblock of data is passed through the switching network thereby swappingthe values at the second and fourth bit positions (418). For example,the second codeword may be passed through coalescing logic 125 toproduce a rearranged second codeword with the values at a second set ofbit position(s) in the data symbol fields swapped with the values atselected bit positions in the single check symbol field.

At a second address, the second block of data is stored to the secondmemory rank (420). For example, the rearranged second codeword may bestored to a second memory rank that has storage cells corresponding tothe second set of bit position(s) are unreliable and/or otherwise mayfail to properly store data under expected operating conditions.

FIG. 5 is a flowchart illustrating a method of retrieving errorcoalescing codewords on a per rank basis. The steps illustrated in FIG.5 may be performed by, for example, one or more elements of system 100,and/or system 200. Information that at least a first bit position in afirst memory rank meets an unreliability criteria is received (502). Forexample, host 150 and/or controller 110 may test a first rank of memoryduring initialization and determine that storage cells corresponding toa first set of bit position(s) that are unreliable and/or otherwise mayfail to properly store data under expected operating conditions. Inanother example, host 150 may query a first rank of memory (e.g., usingmode register set commands and/or using a serial presence detectchannel) and receive information that indicates storage cellscorresponding to the first set of bit position(s) are unreliable and/orotherwise may fail to properly store data under expected operatingconditions. In another example, the information may be in the form ofhost 150 and/or controller 110's control of configuration circuitry 126to swap certain bits when reading and writing to memory 120 and/or agiven rank of memory 120.

Information that at least a second bit position in a second memory rankmeets the unreliability criteria is received (504). For example, host150 and/or controller 110 may test a second rank of memory duringinitialization and determine that storage cells corresponding to asecond set of bit position(s) are unreliable and/or otherwise may failto properly store data under expected operating conditions. In anotherexample, host 150 may query a second rank of memory (e.g., using moderegister set commands and/or using a serial presence detect channel) andreceive information that indicates storage cells corresponding to thesecond set of bit position(s) are unreliable and/or otherwise may failto properly store data under expected operating conditions. In anotherexample, host 150 and/or controller 110 may control configurationcircuitry 126 to swap the second set of bit position(s) with other bitpositions when reading and writing to a first rank of memory.

A switching network is configured to swap the value at the first bitposition with the value at a third bit position (506). For example, whenreading from a first rank of memory, coalescing logic 125 may beconfigured to swap the values at a first set of bit position(s) in arearranged codeword with other values in the rearranged codeword. Thefirst set of bit position(s) may correspond to bit positions in thefirst rank that have been determined (or have been deemed) to beunreliable. This swapping of the values at the first set of bitposition(s) may undo a placement of the values that are going to bestored in unreliable bit positions of the first rank into the same(e.g., check) symbol.

From a first address, a first block of data is retrieved from the firstmemory rank (508). For example, controller 110 may receive, viainterface 128, a first rearranged codeword (e.g., codeword 203). Thefirst block of data is passed through the switching network therebyswapping the values at the first and third bit positions (510). Forexample, the first rearranged codeword (e.g., codeword 203) may bepassed through coalescing logic 125 to produce a first original formatcodeword (e.g., codeword 204) with un-rearranged bit positions.

The first block of data is processed to correct at least one error(512). For example, the first original format codeword (e.g., codeword204) may processed by EDC circuitry 122 to detect and/or correct errors.

The switching network is configured to swap the value at the second bitposition with the value at a fourth bit position (514). For example,when reading from a second rank of memory, coalescing logic 125 may beconfigured to swap the values at a second set of bit position(s) in arearranged codeword with other values in the rearranged codeword. Thesecond set of bit position(s) may correspond to bit positions in thesecond rank that have been determined (or have been deemed) to beunreliable. This swapping of the values at the second set of bitposition(s) may undo a placement of the values that are going to bestored in unreliable bit positions of the second rank into the same(e.g., check) symbol.

From a second address, a second block of data is retrieved from thesecond memory rank (516). For example, controller 110 may receive, viainterface 128, a second rearranged codeword (e.g., codeword 207). Thesecond block of data is passed through the switching network therebyswapping the values at the second and fourth bit positions (518). Forexample, the second rearranged codeword (e.g., codeword 207) may bepassed through coalescing logic 125 to produce a second original formatcodeword (e.g., codeword 208) with un-rearranged bit positions.

The second block of data is processed to correct at least one error(512). For example, the second original format codeword (e.g., codeword208) may processed by EDC circuitry 122 to detect and/or correct errors.

FIG. 6 is a block diagram illustrating example error coalescing logic.Coalescing logic 125 and/or coalescing logic 225 may be or comprisecoalescing logic 600. In FIG. 6, coalescing logic 600 comprises 9:1 MUXs625 a-625 c and 281:1 MUXs 625 d. The 280 9:1 MUXs 625 a-625 c selecteither a value at a specific bit position in the input codeword (e.g.,read data from memory 120 or write data from EDC circuitry 122) thatdoes not include the bit positions associated with CS₃, or a value fromone of the eight (8) bit positions that are part of a single checksymbol (CS₃), and places that value at the corresponding specific bitposition in the output codeword (e.g., read data to EDC circuitry 122 orwrite data destined for memory 120). The eight (8) 281:1 MUXs 625 dselect either a value at a specific bit position associated with CS₃ inthe input codeword or a value from one of the 281 bit positions that arepart of the codeword that does not include CS₃, and places that value atthe corresponding specific bit position in CS₃ of the output codeword.

FIG. 7 is a flowchart illustrating a method of configuring errorcoalescing logic. The steps illustrated in FIG. 7 may be performed by,for example, one or more elements of system 100, and/or system 200.Information that at least a first bit position in a first memory rankmeets an unreliability criteria is received (702). For example, host 150and/or controller 110 may receive information during initialization thatdeems storage cells corresponding to a first set of bit position(s) in afirst memory rank as unreliable and/or otherwise meet a thresholdprobability for failing to properly store data under expected operatingconditions. Information that at least a second bit position in a secondmemory rank meets an unreliability criteria is received (702). Forexample, host 150 and/or controller 110 may receive information duringinitialization that deems storage cells corresponding to a second set ofbit position(s) in a second memory rank as unreliable and/or otherwisemeet a threshold probability for failing to properly store data underexpected operating conditions.

A third bit position and a fourth bit position are selected to reduceswitching between accesses to the first and second ranks (706). Forexample, if the first bit position and the second bit position are theonly unreliable bit positions across all of the memory ranks, the thirdbit position and the fourth bit positions could be selected to bedifferent bits in the same (e.g., check) symbol. This would allow theswitching network (e.g., coalescing logic 125) to remain static (e.g.,not switch at all) regardless of whether the first rank or the secondrank is being accessed. In another example, if the first bit positionand the second bit position are the same, the third bit position and thefourth bit position could be selected to be the same bit position in thesame (e.g., check) symbol. This would allow the MUXs (and/or crossbarswitching elements) directing the values from the first (andsecond—since they are the same) bit position to the third bit positionto remain static regardless of whether the first rank or the second rankis being accessed—thereby reducing switching power. Other optimizations(e.g., involving additional ranks, etc.) are contemplated.

A switching network is configured to at least swap the value at thefirst bit position with the value at a third bit position (708). Forexample, when writing to a first rank of memory, coalescing logic 125may be configured to swap the values at a first set of bit position(s)in the data symbol fields with the values at selected bit positions in asingle check symbol field.

The first block of data is passed through the switching network therebyswapping the values at the first and third bit positions (710). Forexample, the first codeword (e.g., codeword 201) may be passed throughcoalescing logic 125 to produce a first rearranged codeword (e.g.,codeword 202) with the values at a first set of bit position(s) in thedata symbol fields swapped with the values at selected bit positions ina single check symbol field.

At a first address, the first block of data is stored to the firstmemory rank (712). For example, the first rearranged codeword (e.g.,codeword 202) may be stored to a first memory rank that has storagecells corresponding to the first set of bit position(s) are unreliableand/or otherwise may fail to properly store data under expectedoperating conditions.

The switching network is configured to swap at least the value at thesecond bit position with the value at a fourth bit position (714). Forexample, when writing to a second rank of memory, coalescing logic 125may be configured to swap the values at a second set of bit position(s)(which may be different or the same as the first set of bit positions)in the data symbol fields with the values at selected bit positions inthe single check symbol field.

The second block of data is passed through the switching network therebyswapping the values at the second and fourth bit positions (716). Forexample, the second codeword may be passed through coalescing logic 125to produce a rearranged second codeword with the values at a second setof bit position(s) in the data symbol fields swapped with the values atselected bit positions in the single check symbol field.

At a second address, the second block of data is stored to the secondmemory rank (720). For example, the rearranged second codeword may bestored to a second memory rank that has storage cells corresponding tothe second set of bit position(s) are unreliable and/or otherwise mayfail to properly store data under expected operating conditions.

The methods, systems and devices described above may be implemented incomputer systems, or stored by computer systems. The methods describedabove may also be stored on a non-transitory computer readable medium.Devices, circuits, and systems described herein may be implemented usingcomputer-aided design tools available in the art, and embodied bycomputer-readable files containing software descriptions of suchcircuits. This includes, but is not limited to one or more elements ofsystem 100, system 200, and/or coalescing logic 600, and theircomponents. These software descriptions may be: behavioral, registertransfer, logic component, transistor, and layout geometry-leveldescriptions. Moreover, the software descriptions may be stored onstorage media or communicated by carrier waves.

Data formats in which such descriptions may be implemented include, butare not limited to: formats supporting behavioral languages like C,formats supporting register transfer level (RTL) languages like Verilogand VHDL, formats supporting geometry description languages (such asGDSII, GDSIII, GDSIV, CIF, and MEBES), and other suitable formats andlanguages. Moreover, data transfers of such files on machine-readablemedia may be done electronically over the diverse media on the Internetor, for example, via email. Note that physical files may be implementedon machine-readable media such as: 4 mm magnetic tape, 8 mm magnetictape, 3½ inch floppy media, CDs, DVDs, and so on.

FIG. 8 is a block diagram illustrating one embodiment of a processingsystem 800 for including, processing, or generating, a representation ofa circuit component 820. Processing system 800 includes one or moreprocessors 802, a memory 804, and one or more communications devices806. Processors 802, memory 804, and communications devices 806communicate using any suitable type, number, and/or configuration ofwired and/or wireless connections 808.

Processors 802 execute instructions of one or more processes 812 storedin a memory 804 to process and/or generate circuit component 820responsive to user inputs 814 and parameters 816. Processes 812 may beany suitable electronic design automation (EDA) tool or portion thereofused to design, simulate, analyze, and/or verify electronic circuitryand/or generate photomasks for electronic circuitry. Representation 820includes data that describes all or portions of system 100, system 200,and/or coalescing logic 600, and their components, as shown in theFigures.

Representation 820 may include one or more of behavioral, registertransfer, logic component, transistor, and layout geometry-leveldescriptions. Moreover, representation 820 may be stored on storagemedia or communicated by carrier waves.

Data formats in which representation 820 may be implemented include, butare not limited to: formats supporting behavioral languages like C,formats supporting register transfer level (RTL) languages like Verilogand VHDL, formats supporting geometry description languages (such asGDSII, GDSIII, GDSIV, CIF, and MEBES), and other suitable formats andlanguages. Moreover, data transfers of such files on machine-readablemedia may be done electronically over the diverse media on the Internetor, for example, via email

User inputs 814 may comprise input parameters from a keyboard, mouse,voice recognition interface, microphone and speakers, graphical display,touch screen, or other type of user interface device. This userinterface may be distributed among multiple interface devices.Parameters 816 may include specifications and/or characteristics thatare input to help define representation 820. For example, parameters 816may include information that defines device types (e.g., NFET, PFET,etc.), topology (e.g., block diagrams, circuit descriptions, schematics,etc.), and/or device descriptions (e.g., device properties, devicedimensions, power supply voltages, simulation temperatures, simulationmodels, etc.).

Memory 804 includes any suitable type, number, and/or configuration ofnon-transitory computer-readable storage media that stores processes812, user inputs 814, parameters 816, and circuit component 820.

Communications devices 806 include any suitable type, number, and/orconfiguration of wired and/or wireless devices that transmit informationfrom processing system 800 to another processing or storage system (notshown) and/or receive information from another processing or storagesystem (not shown). For example, communications devices 806 may transmitcircuit component 820 to another system. Communications devices 806 mayreceive processes 812, user inputs 814, parameters 816, and/or circuitcomponent 820 and cause processes 812, user inputs 814, parameters 816,and/or circuit component 820 to be stored in memory 804.

Implementations discussed herein include, but are not limited to, thefollowing examples:

Example 1: A memory controller, comprising: first data steeringcircuitry to receive a first codeword comprising a first plurality ofdata symbol locations and a second plurality of check symbol locations,the first data steering circuitry to exchange at least one bit locationin a check symbol location with a corresponding respective at least onebit location in a data symbol location to form a first error coalescedcodeword, the first data steering circuitry to output the first errorcoalesced codeword.

Example 2: The memory controller of example 1, further comprisingcircuitry to store the first error coalesced codeword in a memorycomponent.

Example 3: The memory controller of example 1, further comprising:circuitry to receive a second error coalesced codeword from the memorycomponent.

Example 4: The memory controller of example 3, further comprising:second data steering circuitry to receive the second error coalescedcodeword, the second data steering circuitry to exchange the at leastone bit location in a check symbol location with the correspondingrespective at least one bit location in the data symbol location to forma second codeword comprising the first plurality of data symbollocations and the second plurality of check symbol locations, the seconddata steering circuitry to output the second codeword.

Example 5: The memory controller of example 4, further comprising: errordetection and correction circuitry to process the second codeword todetermine whether there is at least one error in the second codeword.

Example 6: The memory controller of example 5, wherein the errordetection and correction circuitry processes the second codeword withthe check symbol location as erased.

Example 7: The memory controller of example 6, wherein the errordetection and correction circuitry processes the second codeword tocorrect at least one error in the second codeword.

Example 8: A memory controller, comprising: first data steering logic tocoalesce errors from a plurality of bit locations within a plurality ofdata symbol fields of a first codeword that have been determined to meetan unreliability criteria, the error to be coalesced into acorresponding plurality of bit locations within a single check symbolfield of the first codeword to produce an error coalesced codeword.

Example 9: The memory controller of example 8, further comprising:circuitry to store the first error coalesced codeword in a memorycomponent.

Example 10: The memory controller of example 9, further comprising:circuitry to receive a second error coalesced codeword from the memorycomponent.

Example 11: The memory controller of example 10, further comprising:second data steering logic to reverse the coalescing of errors from theplurality of bit locations within the plurality of data symbol fields tothe corresponding plurality of bit locations within a single checksymbol field of the second error coalesced codeword to produce a secondcodeword.

Example 12: The memory controller of example 11, further comprising:error detection and correction circuitry to process the second codewordto determine whether there is at least one error in the second codeword.

Example 13: The memory controller of example 12, wherein the errordetection and correction circuitry processes the second codeword withthe check symbol location as erased.

Example 14: The memory controller of example 13, wherein the errordetection and correction circuitry processes the second codeword tocorrect at least one error in the second codeword.

Example 15: A method of operating a memory controller, comprising:receiving information indicating one or more bit positions in a memoryrank meet an unreliability criteria; receiving a first block of datacomprising a plurality of data fields and a plurality of check fields;before storing the block of data to the memory rank, swapping the valuesat the one or more bit positions with respective selected bit positionsin a single check field of the plurality of check fields; and, storingthe block of data to the memory rank at an address.

Example 16: The method of example 15, further comprising: Examplereceiving, from the memory rank and from the address, a second block ofdata corresponding to a stored version of the first block of data; and,swapping the values at the respective selected bit positions in thesingle check field of the second block of data with the values at theone or more bit positions of the second block of data to form a thirdblock of data that has a plurality of data fields and a plurality ofcheck fields that correspond to the plurality of data fields and theplurality of check fields of the first block of data.

Example 17: The method of example 16, further comprising: processing,using the check fields of the third block of data, the third block ofdata to determine whether bits in the third block of data are differentfrom the first block of data.

Example 18: The method of example 17, wherein the processing treats atleast one bit in the single check field as erased.

Example 19: The method of example 17, further comprising: processing,using the check fields of the third block of data, the third block ofdata to correct bits in the third block of data that are different fromthe first block of data.

Example 20: The method of example 19, wherein the plurality of checkfields are generated from the plurality of data fields according to asymbol based error detection and correction type code.

The foregoing description of the invention has been presented forpurposes of illustration and description. It is not intended to beexhaustive or to limit the invention to the precise form disclosed, andother modifications and variations may be possible in light of the aboveteachings. The embodiment was chosen and described in order to bestexplain the principles of the invention and its practical application tothereby enable others skilled in the art to best utilize the inventionin various embodiments and various modifications as are suited to theparticular use contemplated. It is intended that the appended claims beconstrued to include other alternative embodiments of the inventionexcept insofar as limited by the prior art.

1. (canceled)
 2. A memory device, comprising: first data steeringcircuitry to receive a first codeword comprising a first plurality ofdata symbol locations and a second plurality of check symbol locations,the first data steering circuitry to exchange at least one bit locationin a check symbol location with a corresponding respective at least onebit location in a data symbol location to form a first error coalescedcodeword, the first data steering circuitry to output the first errorcoalesced codeword.
 3. The memory device of claim 2, wherein the memorydevice includes data buffers having at least a portion of the first datasteering circuitry.
 4. The memory device of claim 2, further comprising:non-volatile memory storing information to be used to configure thefirst data steering circuitry.
 5. The memory device of claim 4, furthercomprising: second data steering circuitry to receive a second errorcoalesced codeword, the second data steering circuitry to exchange theat least one bit location in a check symbol location with thecorresponding respective at least one bit location in the data symbollocation to form a second codeword comprising the first plurality ofdata symbol locations and the second plurality of check symbollocations, the second data steering circuitry to output the secondcodeword.
 6. The memory device of claim 5, further comprising: aninterface to communicate with a controller having error detection andcorrection circuitry to process the second codeword to determine whetherthere is at least one error in the second codeword.
 7. The memory deviceof claim 6, wherein the error detection and correction circuitry is toprocess the second codeword with the check symbol location as erased. 8.The memory device of claim 7, wherein the error detection and correctioncircuitry is to process the second codeword to correct at least oneerror in the second codeword.
 9. A memory module, comprising: first datasteering logic to coalesce errors from a plurality of bit locationswithin a plurality of data symbol fields of a first codeword that havebeen determined to meet an unreliability criteria, a first error to becoalesced into a corresponding plurality of bit locations within asingle check symbol field of the first codeword to produce an errorcoalesced codeword.
 10. The memory module of claim 9, wherein the memorymodule includes data buffers having at least a portion of the first datasteering logic.
 11. The memory module of claim 10, further comprising:non-volatile memory storing information to be used to configure thefirst data steering logic.
 12. The memory module of claim 9, furthercomprising: second data steering logic to reverse the coalescing oferrors from the plurality of bit locations within the plurality of datasymbol fields to the corresponding plurality of bit locations within asingle check symbol field of a second error coalesced codeword toproduce a second codeword.
 13. The memory module of claim 12, furthercomprising: an interface to communicate with a controller having errordetection and correction circuitry to process the second codeword todetermine whether there is at least one error in the second codeword.14. The memory module of claim 13, wherein the error detection andcorrection circuitry is to process the second codeword with a checksymbol location as erased.
 15. The memory module of claim 14, whereinthe error detection and correction circuitry processes the secondcodeword to correct at least one error in the second codeword.
 16. Amethod of operating a memory module, comprising: receiving informationindicating one or more bit positions in a memory rank of the memorymodule meet an unreliability criteria; receiving a first block of datacomprising a plurality of data fields and a plurality of check fields;before storing the first block of data to the memory rank, swapping, bythe memory module, values at the one or more bit positions withrespective selected bit positions in a single check field of theplurality of check fields; and, storing the first block of data to thememory rank at an address.
 17. The method of claim 16, furthercomprising: receiving, from the memory rank and from the address, asecond block of data corresponding to a stored version of the firstblock of data; and, by the memory module, swapping the values at therespective selected bit positions in the single check field of thesecond block of data with the values at the one or more bit positions ofthe second block of data to form a third block of data that has aplurality of data fields and a plurality of check fields that correspondto the plurality of data fields and the plurality of check fields of thefirst block of data.
 18. The method of claim 17, further comprising:transmitting the third block of data for processing by a controller, thecontroller to, using the plurality of check fields of the third block ofdata, determine whether bits in the third block of data are differentfrom the first block of data.
 19. The method of claim 18, wherein theprocessing by the controller treats at least one bit in the single checkfield as erased.
 20. The method of claim 18, wherein the controller isto correct bits in the third block of data that are different from thefirst block of data.
 21. The method of claim 20, wherein the pluralityof check fields are generated by the controller from the plurality ofdata fields according to a symbol based error detection and correctiontype code.